import { IHttpResponse, HttpResponse } from '@ibiz-template/core';
import {
  IMapData,
  MDCtrlLoadParams,
  MapController,
  MapData,
  MapService,
  ScriptFactory,
  convertNavData,
  parseUserParams,
} from '@ibiz-template/runtime';
import { ISysMapItem } from '@ibiz/model-core';

export class TileMapController extends MapController {
  /**
   * 原始组件引用
   *
   * @protected
   * @type {(IData | undefined)}
   * @memberof TileMapController
   */
  protected compRef: IData | undefined;

  /**
   * 取处理后的item
   *
   * @protected
   * @type {(IData[] | undefined)}
   * @memberof TileMapController
   */
  protected item: IData[] | undefined;

  /**
   * 设置原始组件引用
   *
   * @param {*} args
   * @memberof TileMapController
   */
  public setCompRef(args: any) {
    this.compRef = args;
  }

  /**
   * 路径回放
   *
   * @param {string} itemName 地图数据项标识
   * @memberof TileMapController
   */
  public routePlayBack(itemName: string) {
    if(this.compRef && this.item){
      //删除点和路径播放
      this.compRef.removeLayer(itemName.toLowerCase());  
      this.compRef.removeLayer('route'); 
      this.afterLoad(this.compRef,this.item);
    }
  }

  /**
   * 部件加载后处理
   *
   * @author chitanda
   * @date 2023-06-21 15:06:44
   * @param {MDCtrlLoadParams} args 本次请求参数
   * @param {IData[]} items 上游处理的数据（默认是后台数据）
   * @return {*}  {Promise<IData[]>} 返回给后续处理的数据
   */
  async afterLoad(args: MDCtrlLoadParams, items: IData[]): Promise<IData[]> {
    if (this.compRef) {
      this.compRef.removeAllLayer();
      const target: IData = {};
      if (this.model.sysMapItems?.length) {
        // 地图所有数据项
        this.model.sysMapItems.map((mapItem: IData) => {
          target[mapItem.id] = [];
          items.forEach(item => {
            if (mapItem.itemStyle === item._itemStyle) {
              target[mapItem.id].push({
                longitude: item._longitude,
                latitude: item._latitude,
              });
            }
          });
          if (this.compRef) {
            this.compRef.removeLayer('route');  
            this.compRef.executeCommand(mapItem.id, mapItem.itemStyle, target[mapItem.id], {
              params: {
                style: {
                  lineType: 'Solit',
                  width: 2,
                  color: '#BB050C',
                  lineDash: [5, 5],
                }
              },
            });
            // 路径播放
            this.compRef.executeCommand('route','ROUTEPLAY',target[mapItem.id],{params: {url: '/assets/images/fxzt-photo.png',}});
          }
        });
      }
    }
    this.item = items;
    return items;
  }
}
